import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)


/**
 * Una unidad AntiAérea.
 * Esta unidad es de posición fija, y tiene una doble ametralladora de largo alcance.
 * 
 * @author Mario Alberto Valencia Valero
 */
public class ArmaAntiaerea extends Unidad
{
    private int turnosParaDisparar = 0;
    private GreenfootSound sonidoDisparo,
                   sonidoExplosion;
    
    /**
     * Constructor
     * 
     * @param col  color de la unidad
     * @humano  es controlada por el jugador?
     */
    public ArmaAntiaerea(Color col, boolean humano)
    {
        super(col, humano);
        setImage("ArmaAntiaerea_"+color.name()+".gif");
        getImage().scale( (int)(getImage().getWidth()*.5), (int)(getImage().getHeight()*.5) );
        vida = 50;
        velocidad = 0;
        sonidoDisparo = new GreenfootSound("machinegun.mp3");
        sonidoExplosion = new GreenfootSound("tank_exploding.wav");
    }
    
    /**
     * Actuar.
     */
    public void act() 
    {
        super.act();
        if( turnosParaDisparar > 0 ) turnosParaDisparar--;
    }
    
    /**
     * Checa si la unidad está en el rango de disparo.
     * @param u  unidad enemiga
     * @return true si la unidad está en rango, si no, false
     */
    protected boolean enRango( Unidad u ){
        return distancia(u) <= 400;
    }
        
    /**
     * Atacar a la unidad objetivo.
     */
    protected void atacar(){
        apuntar();
        if( turnosParaDisparar == 0 ) {
            turnosParaDisparar = 2;
            Disparo d1 = new Disparo(), d2 = new Disparo();
            getWorld().addObject( d1, getX(), getY() );
            getWorld().addObject( d2, getX(), getY() );
            d1.setRotation( getRotation()+6 ); d1.move(27);
            d2.setRotation( getRotation()-6 ); d2.move(27);
            d1.setRotation( getRotation() ); d2.setRotation( getRotation() );
            ImpactoBala ib1 = new ImpactoBala(), ib2 = new ImpactoBala();
            getWorld().addObject( ib1, objetivo.getX()+Greenfoot.getRandomNumber(10), objetivo.getY()+Greenfoot.getRandomNumber(10) );
            getWorld().addObject( ib2, objetivo.getX()+Greenfoot.getRandomNumber(10), objetivo.getY()+Greenfoot.getRandomNumber(10) );
            sonidoDisparo.play();
            objetivo.bajarVida(10);
        }
    }
    
    /**
     * Muere.
     */
    public void muere(){
        sonidoExplosion.play();
    }
}

